#include <iostream>

using namespace std;

class student_t {
  private: // 私有的
    const char *m_name;
    int         m_age;
    float       m_score;

  public: // 共有的
    // 声明构造函数
    student_t(const char *name, int age, float score);
    // 声明普通成员函数
    void setname(const char *name);
    void setage(int age);
    void setscore(float score);
    void show();
};

/*定义构造函数
    (1)构造函数必须是 public 属性的，必须与类名相同, 否则创建对象时无法调用。
    (2)没有变量来接收返回值，即使有也毫无用处, 不管是声明还是定义，函数名前面都不能出现返回值类型，即使是 void也不允许；函数体中不能有 return 语句。
    (3)如果用户自己没有定义构造函数，那么编译器会自动生成一个默认的构造函数，只是这个构造函数的函数体是空的，也没有形参，也不执行任何操作
       student_t::student_t(){}
*/
student_t::student_t(const char *name, int age, float score): m_name(name), m_age(age), m_score(score)
{
    //TODO:
}

// 成员函数的定义
void student_t::setname(const char *name)
{
    m_name = name;
}
void student_t::setage(int age)
{
    m_age = age;
}
void student_t::setscore(float score)
{
    m_score = score;
}

void student_t::show()
{
    if (m_name == NULL || m_age <= 0)
    {
        cout << "成员变量还未初始化" << endl;
    }
    else
    {
        cout << m_name << "的年龄是" << m_age << "，成绩是" << m_score << endl;
    }
}

int main()
{
    // 调用构造函数 Student(char *, int, float)
    student_t stu("小明", 15, 92.5f);
    stu.show();
    // 调用构造函数 Student()
    student_t *pstu = new student_t("李华", 16, 97.5f);
    pstu->show();
    delete pstu; // 释放内存
    pstu = NULL; // 指针置空
    return 0;
}
